<?php

/* * **** DES 加密解密库 Start ******** */
/**
 * des加密用到的临时函数
 */
function des_pkcs5_pad($text, $blocksize){
  $pad = $blocksize - (strlen($text) % $blocksize);
  return $text.str_repeat(chr($pad), $pad);
}

/**
 * des加密字符串
 * @param string $key 加密密钥
 * @param string $data 待加密字符串
 * @return 加密后的十六进制数据
 * @author chunkuan <urcn@qq.com>
 */
function des_encrypt($key, $data){
  $size = mcrypt_get_block_size('des', 'ecb');
  $data = des_pkcs5_pad($data, $size);
  $td = mcrypt_module_open('des', '', 'ecb', '');
  $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  @mcrypt_generic_init($td, $key, $iv);
  $data = mcrypt_generic($td, $data);
  mcrypt_generic_deinit($td);
  mcrypt_module_close($td);
  return strtoupper(bin2hex($data));
}

/**
 * 解密用到的临时函数
 */
function des_pkcs5_unpad($text){
  $pad = ord($text{strlen($text) - 1});
  if($pad > strlen($text)){
    return false;
  }
  if(strspn($text, chr($pad), strlen($text) - $pad) != $pad){
    return false;
  }
  return substr($text, 0, -1 * $pad);
}

/**
 * des解密字符串
 * @param string $key 加密密钥
 * @param string $data 待解密字符串
 * @return 解密后的数据
 * @author chunkuan <urcn@qq.com>
 */
function des_decrypt($key, $data){
  $data = hex2bin(strtolower($data));
  $td = mcrypt_module_open('des', '', 'ecb', '');
  $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  $ks = mcrypt_enc_get_key_size($td);
  @mcrypt_generic_init($td, $key, $iv);
  $decrypted = mdecrypt_generic($td, $data);
  mcrypt_generic_deinit($td);
  mcrypt_module_close($td);
  $result = des_pkcs5_unpad($decrypted);
  return $result;
}

/* * **** DES 加密解密库 End ******** */